/*
 * @Author: shenya shenya0203@163.com
 * @Date: 2024-03-22 11:58:28
 * @LastEditors: shenya shenya0203@163.com
 * @LastEditTime: 2024-03-26 09:53:57
 * @FilePath: /code/include/protocol_data.h
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%A
 */
#ifndef __PROTOCOL_DATA
#define __PROTOCOL_DATA

#include <stdint.h>

// data数据处理结果
enum ErrorDataCode
{
    ERRORDATA_NONE = 0,      // 没有错误
    ERRORDATA_INVALID_PARAM, // 参数无效
    ERRORDATA_OUT_OF_MEMORY, // 内存出错
    ERRORDATA_DATA_NULL,     // 数据为空
    ERRORDATA_HEAD,          // 数据头出错
    ERRORDATA_DATALEN,       // 数据长度出错
};

typedef struct
{
    uint16_t addr; // 设备地址
    uint16_t deviceType;
    uint16_t dataLen; // 数据长度
    uint8_t *data;    // 数据
} devState_t;         // 设备状态数据类型

// 定义链表节点结构体
typedef struct Node
{
    devState_t devState; // 设备状态数据
    struct Node *next;
} devStateNode_t;

int base64_encode1(const char *indata, int inlen, char *outdata, int *outlen);
int base64_decode1(const char *indata, int inlen, char *outdata, int *outlen);

uint8_t reportData_addr(uint8_t *data, uint16_t dataLen, uint16_t *addr);
uint8_t reportData_update(uint8_t *data, uint16_t dataLen);
#endif
